const dayjs = require('dayjs');
/**
 * 材料列表状态管理
 * 使用MobX进行状态管理
 */
const { observable, action } = require('mobx-miniprogram');

// 材料列表Store
const materialListStore = observable({
  // 材料列表数据
  materialList: [],
  
  // 加载状态
  loading: false,
  
  // 分页状态
  page: 1,
  size: 20,
  hasMore: true,
  
  // 搜索关键词
  keyword: '',
  
  // 当前分类ID
  currentCateId: '',
  
  // 分类列表
  cateList: [],
  
  // 设置加载状态
  setLoading: action(function(loading) {
    this.loading = loading;
  }),
  
  // 设置关键词
  setKeyword: action(function(keyword) {
    this.keyword = keyword;
  }),
  
  // 设置当前分类
  setCurrentCateId: action(function(cateId) {
    this.currentCateId = cateId;
  }),
  
  // 重置分页状态
  resetPage: action(function() {
    this.page = 1;
    this.hasMore = true;
  }),
  
  // 设置材料列表
  setMaterialList: action(function(list, append = false) {
    if (append) {
      this.materialList = [...this.materialList, ...list];
    } else {
      this.materialList = list;
    }
    
    // 更新分页状态
    this.page = this.page + 1;
    this.hasMore = list.length >= this.size;
  }),
  
  // 设置分类列表
  setCateList: action(function(list) {
    this.cateList = list;
  }),
  
  // 加载材料分类
  loadCategories: action(async function() {
    try {
      this.setLoading(true);
      
      // 模拟请求分类数据
      await new Promise(resolve => setTimeout(resolve, 500));
      
      const cateList = [
        { id: '', name: '全部' },
        { id: '1', name: '技术文档' },
        { id: '2', name: '产品手册' },
        { id: '3', name: '培训材料' },
        { id: '4', name: '营销资料' }
      ];
      
      this.setCateList(cateList);
      return cateList;
    } catch (err) {
      console.error('加载分类失败:', err);
      return [];
    } finally {
      this.setLoading(false);
    }
  }),
  
  // 加载材料列表
  loadMaterialList: action(async function(refresh = false) {
    if (refresh) {
      this.resetPage();
    }
    
    if (!this.hasMore || this.loading) return;
    
    try {
      this.setLoading(true);
      
      // 准备查询参数
      const params = {
        page: this.page,
        size: this.size,
        keyword: this.keyword,
        cateId: this.currentCateId
      };
      
      // 模拟请求数据
      await new Promise(resolve => setTimeout(resolve, 800));
      
      // 模拟数据
      const mockList = Array(params.size).fill().map((_, idx) => ({
        id: `m_${params.page}_${idx}`,
        title: `材料 ${params.page}-${idx+1}`,
        cateId: ['1', '2', '3', '4'][idx % 4],
        cateName: ['技术文档', '产品手册', '培训材料', '营销资料'][idx % 4],
        fileType: ['pdf', 'doc', 'ppt', 'xls'][idx % 4],
        size: Math.floor(Math.random() * 10000) + 'KB',
        createTime: dayjs().toISOString(),
        updateTime: dayjs().toISOString(),
        downloadCount: Math.floor(Math.random() * 500)
      }));
      
      // 如果有分类筛选
      const filteredList = params.cateId ? 
        mockList.filter(item => item.cateId === params.cateId) :
        mockList;
        
      // 如果有搜索关键词
      const searchedList = params.keyword ?
        filteredList.filter(item => item.title.includes(params.keyword)) :
        filteredList;
      
      // 更新数据
      this.setMaterialList(searchedList, !refresh);
      
      return searchedList;
    } catch (err) {
      console.error('加载材料列表失败:', err);
      return [];
    } finally {
      this.setLoading(false);
    }
  }),
  
  // 根据ID获取材料详情
  getMaterialById: action(function(id) {
    return this.materialList.find(item => item.id === id) || null;
  }),
  
  // 清空搜索状态
  clearSearch: action(function() {
    this.keyword = '';
    this.currentCateId = '';
    this.resetPage();
  })
});

module.exports = {
  materialListStore
}; 